package com.tkm.expressions.vars

class KotlinVars {
    companion object {
        const val b = 100
    }
}

class X {
    //  只读变量作为属性，可以有getter，也可以直接赋值
    val a = 100
    val b: Int
        get() = (Math.random() * 100).toInt()
}

class Personal (var name: String, var age: Int)

//  编译时常量：const val
//  只能定义在全局范围
//  只能使用字面量初始化
//  只能修饰基本类型
const val aa = 114514
//const val bb = (Math.random() * 100).toInt()
//const val xx = X()

fun main() {
    //  Kotlin变量
    var a = 2
    a = 3

    //  kotlin只读变量（不是常量）
    //  如果作为局部变量，则与Java的final常量一样（final int b = 3）
    val b = 3

    val x = X()
    println(x.a)
    println(x.b)
    println(x.b)

    println(aa)

    //  常量引用（堆上创建对象），常量本身不可修改，但常量的属性可以修改
    val p = Personal("Bread", 24)
    p.name = "Tian"
    p.age = 25

    //  运行时常量（运行时才能确定值，只能赋值一次）
    val c: Int
    if (a == 3) {
        c = 20
    } else {
        c = 10
    }
}
